import { EventSys } from "@/common/EventSys";
import { Toast } from "antd-mobile";
import axios, { AxiosError } from "axios";

const request = axios.create({
    baseURL: "/api",
    timeout: 5000,
});

request.interceptors.request.use(
    (config) => {
        // 统一处理需要在请求前携带的数据
        let token = localStorage.getItem('token')
        if (token) {
            config.headers['x-auth-token'] = token;
        }
        return config;
    },
    (err) => Promise.reject(err)
);
request.interceptors.response.use(
    (res) => {
        return res.data;
    },
    (err: AxiosError<MyResponse>) => {
        console.log(err)
        // 统一对错误进行处理
        Toast.show({
            icon: 'fail',
            content: err.response?.data.message
        })

        // 如果token失效，强制跳转回 登录页
        // 目前我们跳转只能使用 useNavigate ，但是目前这个函数既不是hook也不是函数组件，无法使用 useNavigate
        // 解耦 使用 发布订阅模式
        if (err.response?.data.errCode === 1002) {
            // 发生了登录超时这件事
            EventSys.emit('login_timeout')
        }
    }
);

export default request;